#!/usr/bin/python
# vim:fileencoding=utf8
"""
Файл содержит описание класса *слово*.
"""

import itertools

class Word:
    """
    Класс *слово*.
    Идея: хранит информацию обо всех формах слова.
    Умеет говорить по строке форму слова.
    И наоборт, может построить по форме правильную строку.
    """
    ACCEPTABLE_FORMS = {}
    def __init__(self, base):
        self.base = base
        self.stop_word = False
        
    def __str__(self):
        return self.to_string()
    
    def to_string(self, **form):
        return self.base

    def get_type(self):
        return self.__class__.__name__

    def all_forms(self):
        """
        Генерирует все формы слова.
        """
        #TODO хорошее название для следующей переменной.
        all_forms = itertools.product(*(self.ACCEPTABLE_FORMS.values()))
        for form in all_forms:
            form = dict(itertools.izip(self.ACCEPTABLE_FORMS.iterkeys(), form))
            yield self.to_string(**form)


    def uniq_forms(self):
        """
        Генерирует уникальные формы слова.
        """
        for form, _ in itertools.groupby(self.all_forms()):
            yield form

